home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fritz: All Fritz
/
All Fritz.zip
/
All Fritz
/
FILES
/
PROGNG_C
/
DBTOOLC.LZH
/
SOURCE.ARC
/
GETPASS.C
< prev
next >
Wrap
Text File
|
1986-06-10
|
3KB
|
114 lines
/* function to get a password from the keyboard */
getpass(maxchar,ret1,bell,del,retint,autret,maskchar)
int maxchar; /* max char(s) to accept in the password */
int ret1; /* return keys to signal end of input. Summed values */
/* of keys you wish to use as the signal. These chars */
/* are not echoed. */
/* 1024 - cursor down, 512 - cursor up, 256 - cursor right */
/* 128 - cursor left, 64 - end, 32 - home, 16 - shift tab */
/* 8 - tab, 4 - PgDn, 2 - PgUp, 1 - <cr> */
int bell; /* 0 - no bell, anything else,yes a bell for wrong input */
int del; /* delete char(s) to accept 0 - backspace key */
/* 1 - delete key */
/* anything else use both keys */
char *retint; /* pointer to where to return password */
int autret; /* 0 - automatic return when hit maxchar */
/* anything else, no automatic return */
char maskchar; /* character to use as a mask character */
{
char ve[11][2],c;
int i,j,k,l,ret;
if((maxchar < 1)||(maxchar > 2000)) return(-1); /* maxchar out of range */
i = ret1; retint[0] = '\0';
for(k = 1024,j = 0; j < 11; ++j,k=k/2)
{
if(i >= k)
{
i = i - k;
if((j == 7)||(j == 10)) ve[j][0] = 0;
else ve[j][0] = 1;
switch(j)
{
case 0: ve[0][1] = 80; break;
case 1: ve[1][1] = 72; break;
case 2: ve[2][1] = 77; break;
case 3: ve[3][1] = 75; break;
case 4: ve[4][1] = 79; break;
case 5: ve[5][1] = 71; break;
case 6: ve[6][1] = 15; break;
case 7: ve[7][1] = 9 ; break;
case 8: ve[8][1] = 81; break;
case 9: ve[9][1] = 73; break;
case 10:ve[10][1] = 13; break;
}
}
else
{
ve[j][0] = -1; ve[j][1] = -1;
}
}
i = 0; ret = 0;
for( ; ; )
{
k = getkey(&j);
/* one of the end input keys */
for(l = 0; l < 11; ++l)
{
if((k == ve[l][0])&&(j == ve[l][1]))
{
ret = ve[l][1];
return(ret);
}
}
/* delete or backspace key */
c = 'b';
if((k == 0)&&(j == 8))
{
if((del != 1)&&(i != 0)&&(del != -1)) c = 'y';
}
if((k == 1)&&(j == 83))
{
if((del != 0)&&(i != 0)&&(del != -1)) c = 'y';
}
if(k == 0)
{
if((j > 96)&&(j < 123)) c = 'n';
if((j > 64)&&(j < 91)) c = 'n';
if((j > 47)&&(j < 58)) c = 'n';
}
if(c == 'y')
{
curback();
wrtch(1,' ');
--i;
retint[i] = '\0';
continue;
}
else
{
if(c == 'b')
{
if(bell != 0)
sound(500,2);
continue;
}
}
if(i == maxchar)
{
if(bell != 0) sound(500,2);
continue;
}
/* char is valid */
retint[i] = j;
++i;
retint[i] = '\0';
wrtch(1,maskchar);
curfwd();
if((autret == 0)&&(i == maxchar))
{
return(-2);
}
}
}